#ifndef _BT_API_H
#define _BT_API_H

/* ------------------------------------------- 
   包含头文件
-------------------------------------------- */
#include "main.h"           // 主硬件初始化头文件
#include "mx22a.h"          // 与MX22A相关的头文件
#include "stdio.h"          // 提供标准输入输出函数，用于调试和打印日志
#include "time.h"           // 提供时间相关功能，如获取当前时间
#include "rtc.h"            // 实时时钟相关功能头文件

/* ------------------------------------------- 
   AT命令定义
-------------------------------------------- */
#define AT_DC "AT+DISC=1"   // 断开连接的AT命令

/* ------------------------------------------- 
   数据结构定义
-------------------------------------------- */

/**
  * @brief 存放传感器数据的结构体
  * @details 包括步数、心率和血氧浓度
  */
typedef struct {
    uint32_t steps;        // 步数
    uint8_t heart_rate;   // 心率
    uint8_t blood_oxygen; // 血氧浓度
} SensorData;

/* ------------------------------------------- 
   枚举类型定义
-------------------------------------------- */

/**
  * @brief 数据发送类型枚举
  * @details 定义了发送数据的三种类型：响应（RES）、数据（DATA）、命令（COM）
  */
typedef enum{
    RES = 0,  // 响应类型
    DATA,     // 数据类型
    COM       // 命令类型
} sendComType;

/**
  * @brief 蓝牙命令枚举
  * @details 定义了三种蓝牙命令：时间（BT_TIME）、断开连接（BT_DC）、握手（BT_HS）
  */
typedef enum{
    BT_TIME = 0,  // 时间同步命令
    BT_DC,        // 断开连接命令
    BT_HS         // 握手命令
} sendCom;

/* ------------------------------------------- 
   函数声明
-------------------------------------------- */
/**
  * @brief 获取当前的RTC时间，并以字符串格式展示
  * @param datetime 存放日期和时间的字符数组
  * @retval None
  */
time_t RTC_getTimestamp ();

/**
  * @brief 发送传感器数据
  * @param sensor_data 传感器数据结构体
  * @retval 若发送成功，返回1；否则返回0
  */
_Bool send_sensor_data(SensorData *sensor_data);

/**
  * @brief 处理蓝牙命令
  * @param command 蓝牙命令数据
  * @retval 若命令处理成功，返回1；否则返回0
  */
_Bool handle_ble_command(uint8_t *command);

/**
  * @brief 发送蓝牙命令
  * @param com 发送的命令类型（如BT_TIME、BT_DC等）
  * @retval 若命令发送成功，返回1；否则返回0
  */
_Bool SendCommand(sendCom com);

/**
  * @brief 断开当前蓝牙连接
  * @retval 返回1表示断开成功，返回0表示断开失败或未连接
  */
_Bool BT_Disconnect();

#endif // _BT_API_H
